自建k8s版本升級

睡睡唸

有人說他要測試OME(OverMediaEngine),串流直播軟體,說比SRS好一些,但自建的k8s版本不夠,不能上gateway API,所以升級吧。

正文

更新前請先確認版本更新後,你的服務不會掛掉。
更新大版本時,會有API棄用的狀況, 162.查詢已棄用的API

目標

更新k8s的master一臺與node兩臺的版本

步驟

  1. 查詢目前的版本
kuberctl version

(這是目前版本,升級當時的版本為1.22.?)
server的版本為1.25.14

Server Version: version.Info

  1. 升級kubeadm
# 查看所有可用的kubeadm的版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes
# 然後升級kubeadm的版本到1.23.0
yum install -y kubeadm-1.23.0-0 --disableexcludes=kubernetes
# 查看kubeadm版本
kubeadm version
  1. 升級master控制
kubeadm upgrade plan

172-fig.1.jpg

這邊碰到一個問題,我本來只想升級到1.23.0,
但上面這張圖,他要求直接到1.23.17,
不照做行不行,『不行』,升級會出錯。

所以回到第二步,再度更新kubeadm到1.23.17

再來一次kubeam upgrade plan
這次沒出現警告了
172-fig.2.jpg

執行上面執行完upgrade plan提供升級指令

kubeadm upgrade apply v1.23.17 

完成後會看到

SUCCESS! Your cluster was upgraded to "v1.23.17". Enjoy!

172-fig.3.jpg

  1. 升級kubectl 與 kubelet

查看目前節點版本

kubectl get node -o wide

驅逐當下節點的pod(這段與參考來源的指令不一樣,這個比較暴力)
$master為節點的名稱

kubectl drain --force --ignore-daemonsets --delete-local-data --grace-period=10 "$master"

等驅逐完後,確認node為SchedulingDisabled狀態,就可已開始升級了。

yum install -y kubelet-1.23.17-0 kubectl-1.23.17-0 --disableexcludes=kubernetes
# 重啓服務
sudo systemctl daemon-reload
sudo systemctl restart kubelet

查詢node版本是否已經更新,然後解除封鎖。

kubectl uncordon $node
  1. 升級node的版本
    重複第四步驟,只有更新那一段yum install....需要到目標的node機器上做。

所以指令如下
$node為要更新的node主機

# master主機
kubectl drain --force --ignore-daemonsets --delete-local-data --grace-period=10 "$node"
# node主機
yum install -y kubelet-1.23.17-0 kubectl-1.23.17-0 --disableexcludes=kubernetes
# 重啓服務
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# master主機
kubectl uncordon $node

ref.